//给你一个整数数组 nums ，请你找出数组中乘积最大的连续子数组（该子数组中至少包含一个数字），并返回该子数组所对应的乘积。 
//
// 
//
// 示例 1: 
//
// 输入: [2,3,-2,4]
//输出: 6
//解释: 子数组 [2,3] 有最大乘积 6。
// 
//
// 示例 2: 
//
// 输入: [-2,0,-1]
//输出: 0
//解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。 
// Related Topics 数组 动态规划 
// 👍 1147 👎 0

/**
 * @author DaHuangXiao
 */
package leetcode.editor.cn;

import org.omg.CORBA.INTERNAL;

public class MaximumProductSubarray {
    public static void main(String[] args) {
        Solution solution = new MaximumProductSubarray().new Solution();
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int maxProduct(int[] nums) {
        if (nums.length==1){
            return nums[0];
        }
        int minDp = nums[0];
        int maxDp = nums[0];
        int res = maxDp;
        for (int i = 1; i < nums.length; i++) {
            int tempMin = nums[i]*minDp;
            int tempMax = nums[i]*maxDp;
            minDp = Math.min(Math.min(tempMax,tempMin),nums[i]);
            maxDp = Math.max(Math.max(tempMax,tempMin),nums[i]);

            if (Math.max(maxDp,nums[i])>res){
                res = Math.max(maxDp,nums[i]);
            }
        }

        return res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}